package com.controller;

import com.bean.Book;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.io.IOUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.ArrayList;
import java.util.List;


@Controller
@RequestMapping("/book")
public class BookController {

    @RequestMapping("/add")
//    MultipartFile imgFile与bean的name="imgFile"一致，用于接收文件。
    public String addBook(Book book, MultipartFile imgFile, HttpServletRequest request) throws IOException {
        System.out.println("--------------addBook");

        //imgFile表示上传的图片；
        System.out.println(imgFile);

        //1.截取上传文件的后缀名，生成新的文件名；
        //getOriginalFilename()获取文件上传时的名字。
        String originalFileName = imgFile.getOriginalFilename();
        //获取文件后缀名。
        String ext = originalFileName.substring(originalFileName.lastIndexOf("."));
        //给一个新的文件名字；为了防止重复用”系统毫秒+文件后缀名“命名；
        String fileName = System.currentTimeMillis() + ext;

        //2.获取webapp/img目录在服务器的路径；
        //注意：如果webapp/img目录是空的，那么它不会在服务器上创建，所以需要放一个任意的文件；
        String dir = request.getServletContext().getRealPath("img");
        String savePath = dir + "/" + fileName;

        //3.保存文件
        imgFile.transferTo(new File(savePath));

        //4.将图片的访问路径设置到Book对象；
        book.setBookImg("img/" + fileName);

        //5.调用service保存book到数据库；
        //略

        return "/tips.jsp";
    }

    //Ajax请求
    @RequestMapping("/list")
    @ResponseBody
    public String[] listImg(HttpServletRequest request) {
        System.out.println("----------list");
        //1.从img目录下获取所有的图片信息；
        String dir = request.getServletContext().getRealPath("img");
        File imgDir = new File(dir);
        //这个路径下所有文件的名字；listFiles()是获取所有的子文件；
        String[] fileNames = imgDir.list();
        System.out.println(fileNames);
        return fileNames;

    }

    //图片下载
    @RequestMapping("/download")
    public void downloadImg(String fname, HttpServletRequest request, HttpServletResponse response) throws Exception {
        //从img目录找到当前文件
        String dir = request.getServletContext().getRealPath("img");
        String filePath = dir + "/" + fname;
        FileInputStream fileInputStream = new FileInputStream(filePath);

        //如果是浏览器可以识别的类型就直接展示，不能识别就另存为；
        //让浏览器识别不了
        response.setContentType("application/exe");
        //把文件名通过响应头给你
        response.addHeader("Content-Disposition", "attachment;filename=" + fname);

        //把文件给客户端
        IOUtils.copy(fileInputStream, response.getOutputStream());
    }

    @RequestMapping("/query")
    public String query(String bookId) {
        //制造空指针异常；不传bookId则为null，相当于null调用方法；
        System.out.println(bookId.length());
        int bId = Integer.parseInt(bookId);
        return "/tips.jsp";
    }

}







